FILE_COUNT=$#
if((FILE_COUNT!=1)); then
    echo ">>> 错误：未传递端口！"
    echo "  用法：gen-redis-conf.sh port"
    exit;
fi
# 环境变量
PORT=$1
REDIS_HOME=/opt/module/redis/$PORT
REDIS_DATA=$REDIS_HOME/data
REDIS_CONF=$REDIS_HOME/redis.conf
REDIS_LOG=$REDIS_HOME/redis.log

#配置文件不存在，初始化模版
if [ ! -e  "$REDIS_CONF" ]; then
# 创建配置文件
mkdir -p $REDIS_DATA
touch $REDIS_CONF
touch $REDIS_LOG
sudo cat >$REDIS_CONF<<EOF

################################## INCLUDES ###################################
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES #####################################
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
################################## NETWORK #####################################
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
################################# GENERAL #####################################
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
# debug | verbose | notice | warning
loglevel verbose
logfile "/logs/redis.log"
databases 16
always-show-logo yes
################################ SNAPSHOTTING  ################################
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir "/data"
################################## SECURITY ###################################
# requirepass 123456
# rename-command CONFIG ""
################################# REPLICATION #################################
# slaveof 172.25.254.101 6379
# masterauth  123456
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
################################### CLIENTS ####################################
# maxclients 10000
############################## MEMORY MANAGEMENT ################################
# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key among the ones with an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
# maxmemory <bytes>
# maxmemory-policy noeviction
# maxmemory-samples 5
# replica-ignore-maxmemory yes
############################# LAZY FREEING ####################################
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
############################## APPEND ONLY MODE ###############################
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
################################ LUA SCRIPTING  ###############################
lua-time-limit 5000
################################ REDIS CLUSTER  ###############################
# cluster-enabled yes
# cluster-config-file nodes-6379.conf
# cluster-node-timeout 15000
# cluster-replica-validity-factor 10
# cluster-migration-barrier 1
# cluster-require-full-coverage yes
# cluster-replica-no-failover no
########################## CLUSTER DOCKER/NAT support  ########################
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380
################################## SLOW LOG ###################################
slowlog-log-slower-than 10000
slowlog-max-len 128
################################ LATENCY MONITOR ##############################
latency-monitor-threshold 0
############################# EVENT NOTIFICATION ##############################
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
notify-keyspace-events ""
############################### ADVANCED CONFIG ###############################
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
########################### ACTIVE DEFRAGMENTATION #######################

EOF
fi
# 文件权限
chmod 666 $REDIS_CONF
chmod 666 $REDIS_LOG

echo "============ redis数据目录"$REDIS_HOME" ============"
# 创建数据目录

mkdir -p $REDIS_DATA
touch $REDIS_CONF
if [ $(command -v tree) ]; then
  tree $REDIS_HOME
else 
  ls -l $REDIS_HOME
fi
echo "================ source 调用本脚本时可用变量 =============="
# 创建数据目录
# 环境变量
echo "\$PORT=$PORT"
echo "\$REDIS_HOME=$REDIS_HOME"
echo "\$REDIS_DATA=$REDIS_DATA"
echo "\$REDIS_CONF=$REDIS_CONF"
echo "\$REDIS_LOG=$REDIS_LOG"
echo "===================================================="